
package com.clyme.expediente.controlador;


import com.clyme.expediente.entidad.Modulo;
import com.clyme.expediente.entidad.Perfil;
import com.clyme.expediente.servicios.PerfilServicio;
import com.clyme.expediente.utilitarios.Utilitario;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
@ManagedBean(name = "perfilControlador")
@ViewScoped
public class PerfilControlador implements Serializable {

    Perfil perfil;
    List<Perfil> perfiles;
    List<Modulo> modulos;
    private PerfilServicio perfilServicio;
    @ManagedProperty("#{sesionControlador}")
    SesionControlador sesionControlador;

    public PerfilControlador() {
    }

    public void initRegistrar() {
        if (!FacesContext.getCurrentInstance().isPostback()) {
            perfil = new Perfil();
            perfilServicio = new PerfilServicio();
            modulos = perfilServicio.obtenerModulos();
        }
    }

    public void initUpdate() {
        if (!FacesContext.getCurrentInstance().isPostback()) {
            Object parametro = Utilitario.getFlash("idPerfil");
            if (parametro == null) {
                Utilitario.redireccionarJSF(FacesContext.getCurrentInstance(), "/views/perfil/list.xhtml");
                return;
            }
            perfilServicio = new PerfilServicio();
            perfil = perfilServicio.obtenerPerfilPorID((Integer) parametro);
            modulos = perfilServicio.cargarModuloConPermiso((perfil.getId()));
        }
    }

    public void initLista() {
        if (!FacesContext.getCurrentInstance().isPostback()) {
            //sesionControlador.generarModulo(1);
            /**
             * NUMERO MAGICO T_T *
             */
            perfilServicio = new PerfilServicio();
            perfiles = perfilServicio.obtenerTodos();
        }
    }

    public void registrarPerfil() {
        if (!esVistaValida()) {
            return;
        }
        perfilServicio.registrarPerfil(perfil, modulos);
        limpiar();
    }

    public void actualizarPerfil() {
        if (!esVistaValida()) {
            return;
        }
        perfilServicio.actualizarPerfil(perfil, modulos);
    }

    private void limpiar() {
        perfil = new Perfil();
        modulos = perfilServicio.obtenerModulos();
    }

    /**
     * VALIDACIONES    *
     */
    private boolean esVistaValida() {
        boolean resultado = true;
        if (!esPerfilValido()) {
            resultado = false;
        }
        return resultado;
    }

    private boolean esPerfilValido() {
        boolean resultado = true;
        if (Utilitario.esNulo(perfil.getNombre().trim())) {
            Utilitario.enviarMensajeGlobalError("Debe ingresar el Perfil");
            resultado = false;
        } else if (!Utilitario.esRangoValido(perfil.getNombre(), 120)) {
            Utilitario.enviarMensajeGlobalError("El maximo de caracteres permitidos es 120 para el Perfil");
            resultado = false;
        } else if(!Utilitario.esAlfaNumerico(perfil.getNombre())){
            Utilitario.enviarMensajeGlobalError("El perfil solo acepta caracteres alfanumericos");
            resultado = false;
        }
        return resultado;
    }

    public String cargarUpdate(int id) {
        Utilitario.putFlash("idPerfil", id);
        return "update.xhtml?faces-redirect=true";
    }

    /**
     * GETTERS AND SETTERS *
     */
    
    public List<Perfil> getPerfiles() {
        return perfiles;
    }

    public void setPerfiles(List<Perfil> perfiles) {
        this.perfiles = perfiles;
    }

    public Perfil getPerfil() {
        return perfil;
    }

    public void setPerfil(Perfil perfil) {
        this.perfil = perfil;
    }

    public List<Modulo> getModulos() {
        return modulos;
    }

    public void setModulos(List<Modulo> modulos) {
        this.modulos = modulos;
    }

    public void setSesionControlador(SesionControlador sesionControlador) {
        this.sesionControlador = sesionControlador;
    }

}
